﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
//MicroDesigner
using Jc.MicroDesigner.Drawings;
using Jc.MicroDesigner.Management;

namespace Jc.MicroDesigner.Objects
{
    /// <summary>
    /// Базовый элемент
    /// </summary>
    public abstract class BaseElement
    {
        /// <summary>
        /// Имя
        /// </summary>
        protected string _Name = "";

        /// <summary>
        /// Время выполнения
        /// </summary>
        protected int _TicTime = 0;

        /// <summary>
        /// Свойства отрисовки
        /// </summary>
        protected ElementImage _DrawOptions = null;

        /// <summary>
        /// Описание
        /// </summary>
        protected string _Description = "";

        /// <summary>
        /// Имя элемента
        /// </summary>
        public string Name
        {
            get
            {
                return _Name;
            }
            set
            {
                _Name = value;
            }
        }

        /// <summary>
        /// Время выполнения
        /// </summary>
        public int TicTime
        {
            get
            {
                return _TicTime;
            }
        }

        /// <summary>
        /// Параметры рисования
        /// </summary>
        public ElementImage DrawOptions
        {
            get
            {
                return _DrawOptions;
            }
        }

        /// <summary>
        /// Описание элемента
        /// </summary>
        public string Description
        {
            get
            {
                return _Description;
            }
            set
            {
                _Description = value;
            }
        }

        /// <summary>
        /// Создать базовый элемент
        /// </summary>
        public BaseElement() : this("") { }

        /// <summary>
        /// Создать базовый элемент
        /// </summary>
        /// <param name="name">Имя</param>
        public BaseElement(string name)
        {
            _Name = name;
            _DrawOptions = new ElementImage(this);
        }

        /// <summary>
        /// Установить состояние элемента в исходное
        /// </summary>
        public virtual void Refresh()
        {
 
        }

        /*
         * Сохранять данные элемент может только в ветвь ConfigSection.Additionals
         * Загрузку возможно осуществлять и из других секций
        */

        /// <summary>
        /// Виртуальная функция загрузки дополнительного контента из файла схемы
        /// </summary>
        /// <param name="nodes">Ветви с информацией</param>
        public virtual void LoadAdditionals(Dictionary<ConfigSection, XmlNode> nodes) { }

        /// <summary>
        /// Сохранить дополнительные свойства в файл схемы
        /// Выгружать только свойства имеющие оба метода: и get, и set
        /// </summary>
        /// <param name="nodes">Ветви с информацией</param>
        public virtual void SaveAdditionals(Dictionary<ConfigSection, XmlNode> nodes) { }
    }
}